/**
 * 
 */
package de.midnightdance.admin.vorteile;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import de.cbf.util.ui.editentities.controller.ControllerEditEntity;
import de.cbf.util.ui.editentities.interfaces.ICompositeEditEntity;
import de.cbf.util.ui.editentities.interfaces.IEditableEntity;
import de.midnightdance.admin.ws.entities.VorteilDB;

/**
 * @author Stefan Alter
 *
 */
public class PresenterEditVorteil extends ControllerEditEntity {

	private PCLVorteil pclVorteil;	
	
	private ListenerModifiedPunkte		listenerModifiedPunkte		;
	private ListenerModifiedLimitiert	listenerModifiedLimitiert	;
	private ListenerModifiedName		listenerModifiedName		;
	private ListenerModifiedStart		listenerModifiedStart		;
	private ListenerModifiedSterblich 	listenerModifiedSterblich	;
	
	public PresenterEditVorteil() {
		super();
		pclVorteil = new PCLVorteil();
		//
		listenerModifiedPunkte		= new ListenerModifiedPunkte();
		listenerModifiedLimitiert	= new ListenerModifiedLimitiert();		
		listenerModifiedName		= new ListenerModifiedName();
		listenerModifiedStart		= new ListenerModifiedStart();
		listenerModifiedSterblich	= new ListenerModifiedSterblich();		
	}

	/* (non-Javadoc)
	 * @see de.cbf.util.ui.editentities.controller.ControllerEditEntity#checkEntity(de.cbf.util.ui.editentities.interfaces.IEditableEntity)
	 */
	@Override
	protected boolean checkEntity(IEditableEntity value)
			throws IllegalArgumentException {
		return (value instanceof VorteilDB);
	}

	/* (non-Javadoc)
	 * @see de.cbf.util.ui.editentities.controller.ControllerEditEntity#checkView(de.cbf.util.ui.editentities.interfaces.ICompositeEditEntity)
	 */
	@Override
	protected boolean checkView(ICompositeEditEntity value)
			throws IllegalArgumentException {
		return (value instanceof CompositeEditVorteil);
	}
	
	/* (non-Javadoc)
	 * @see de.cbf.util.ui.editentities.controller.ControllerEditEntity#registerViewListenersAndInit(de.cbf.util.ui.editentities.interfaces.ICompositeEditEntity)
	 */
	@Override
	protected boolean registerViewListenersAndInit(ICompositeEditEntity value) {
		if (value instanceof CompositeEditVorteil) {
			CompositeEditVorteil composite = (CompositeEditVorteil) value;
			composite.registerModfiedPunkteListener		(listenerModifiedPunkte);
			composite.registerModifiedLimitiertListener	(listenerModifiedLimitiert);
			composite.registerModifiedNameListener		(listenerModifiedName);
			composite.registerModifiedStartListener		(listenerModifiedStart);
			composite.registerModifiedSterblichListener	(listenerModifiedSterblich);	
		
			return true;
		}
		return false;
	}
	/* (non-Javadoc)
	 * @see de.cbf.util.ui.editentities.controller.ControllerEditEntity#deRegisterViewListeners(de.cbf.util.ui.editentities.interfaces.ICompositeEditEntity)
	 */
	@Override
	protected boolean deRegisterViewListeners(ICompositeEditEntity value) {
		if (value instanceof CompositeEditVorteil) {
			CompositeEditVorteil composite = (CompositeEditVorteil) value;
			composite.deRegisterModfiedPunkteListener		(listenerModifiedPunkte);
			composite.deRegisterModifiedLimitiertListener	(listenerModifiedLimitiert);
			composite.deRegisterModifiedNameListener		(listenerModifiedName);
			composite.deRegisterModifiedStartListener		(listenerModifiedStart);
			composite.deRegisterModifiedSterblichListener	(listenerModifiedSterblich);
			
			return true;
		}
		return false;
	}
	/* (non-Javadoc)
	 * @see de.cbf.util.ui.editentities.controller.ControllerEditEntity#getPCLforEntity()
	 */
	@Override
	protected PropertyChangeListener getPCLforEntity() {		
		return pclVorteil;
	}	

	
	public void modifiedName() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			vorteilDB.setName(composite.getVorteilName());
			//
			testUnsavedChanges();
		}	
	}
	public void modifiedPunkte() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			vorteilDB.setPunkte(composite.getPunkte());
			//
			testUnsavedChanges();
		}		
	}	
	
	public void modifiedStart() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			vorteilDB.setStart(composite.getStart());
			//
			testUnsavedChanges();
		}			
	}	
	public void modifiedSterblich() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			vorteilDB.setSterblich(composite.getSterblich());
			//
			testUnsavedChanges();
		}	
	}
	public void modifiedLimitiert() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			vorteilDB.setLimitiert(composite.getLimitiert());
			//
			testUnsavedChanges();
		}	
	}

	public void updateName() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			composite.setVorteilName(vorteilDB.getName());			
		}	
	}
	public void updatePunkte() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			composite.setPunkte(vorteilDB.getPunkte());
		}	
	}
	public void updateBesonderheit() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			composite.setStart(vorteilDB.isStart());
			composite.setSterblich(vorteilDB.isSterblich());
		}			
	}
	
	public void updateLimitiert() {
		if ((entity instanceof VorteilDB)&& (view instanceof CompositeEditVorteil)) {
			VorteilDB vorteilDB = (VorteilDB) entity;
			CompositeEditVorteil composite = (CompositeEditVorteil)view;
			//
			composite.setLimitiert(vorteilDB.getLimitiert());
		}	
	}
	
	private class PCLVorteil implements PropertyChangeListener{
		@Override
		public void propertyChange(PropertyChangeEvent evt) {			
			if (evt instanceof IndexedPropertyChangeEvent) {
				IndexedPropertyChangeEvent idxEvent = (IndexedPropertyChangeEvent) evt;
				switch (idxEvent.getIndex()) {					
					case VorteilDB.PCE_INDEX_name 	:{
						updateName();
						break;
					}
					case VorteilDB.PCE_INDEX_punkte 	:{
						updatePunkte();
						break;
					}
					case VorteilDB.PCE_INDEX_besonderheit:{
						updateBesonderheit();
						break;
					}					
					case VorteilDB.PCE_INDEX_limitiert:{
						updateLimitiert();
						break;					
					}
				default:
					break;
				}
			}
		}		
	}
	private class ListenerModifiedName implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			modifiedName();			
		}		
	}
	private class ListenerModifiedPunkte implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			modifiedPunkte();			
		}		
	}	
	private class ListenerModifiedStart implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			modifiedStart();			
		}		
	}
	private class ListenerModifiedSterblich implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			modifiedSterblich();			
		}		
	}
	private class ListenerModifiedLimitiert implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			modifiedLimitiert();			
		}		
	}
	
	
	
}
